/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;

import BE.PlantillaPapelTrabajo;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author CarLita
 */
public class PlantillaPapelTrabajoDao {
    Session session;
    public PlantillaPapelTrabajoDao(){
        //session = HibernateUtil.getSessionFactory().openSession();
    }

    public List buscarPorCriterios(PlantillaPapelTrabajo plantPT) {
        session = HibernateUtil.getSessionFactory().openSession();
        String nombre = plantPT.getNombre();
        int tipo = plantPT.getTipo();
        String nivel1 = plantPT.getNivel1();
        String nivel2 = plantPT.getNivel2();
        String nivel3 = plantPT.getNivel3();
        int idPlantillaMarco = plantPT.getPlantillaMarcoReferencia().getIdPlantilla();
        System.out.println("id plantilla mr: "+ idPlantillaMarco);

        String hql = "from PlantillaPapelTrabajo plantilla_papel_trabajo where "
                + "plantilla_papel_trabajo.nombre like concat('%',?,'%') "
                + "and plantilla_papel_trabajo.nivel1 like concat('%',?,'%') "
                + "and plantilla_papel_trabajo.nivel2 like concat('%',?,'%') "
                + "and plantilla_papel_trabajo.nivel3 like concat('%',?,'%') "
                + "and plantilla_papel_trabajo.plantillaMarcoReferencia.idPlantilla = ? ";
        if (plantPT.getTipo()>0){
            hql+= "and plantilla_papel_trabajo.tipo = ?";
        }
        Query query = session.createQuery(hql);
        query.setString(0, nombre);
        query.setString(1, nivel1);
        query.setString(2, nivel2);
        query.setString(3, nivel3);
        query.setInteger(4,idPlantillaMarco);       
        
        if (plantPT.getTipo()>0){
            query.setInteger(5, tipo);
        }
        
        List resultList = null;

        try {            
            session.beginTransaction();
            resultList = query.list();
            session.getTransaction().commit();
        } catch (HibernateException he) {
            he.printStackTrace();            
        } finally {
            session.close();
        }
        return resultList;
    }

    public boolean eliminarPorId(int id){
        boolean ok =true;
        PlantillaPapelTrabajo plantilla = buscarPorId(id);
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session.beginTransaction();
            session.delete(plantilla);
            tx.commit();
            session.close();
        }
        catch(Exception e){
            ok = false;
            System.out.println(e.getMessage());
        }
        return ok;
    }

    public boolean guardar(PlantillaPapelTrabajo papelTrabajo) {
        boolean ok = true;
        session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try {
            tx.begin();
            session.saveOrUpdate(papelTrabajo);
            tx.commit();
        } catch (HibernateException he){
            tx.rollback();
            he.printStackTrace();
            ok=false;
        } finally {
            session.close();
        }
        return ok;
    }

    public PlantillaPapelTrabajo buscarPorId(int id) {
        session = HibernateUtil.getSessionFactory().openSession();
        String hql = "from PlantillaPapelTrabajo plantilla_papel_trabajo where plantilla_papel_trabajo.idPlantillaPt= ? ";
        Query query = session.createQuery(hql);
        query.setInteger(0, id);
        List resultList = null;

        try {
            session.beginTransaction();
            resultList = query.list();
            session.getTransaction().commit();
            session.close();
            return (PlantillaPapelTrabajo)resultList.get(0);
        } catch (HibernateException he) {
            he.printStackTrace();
        }

        session.close();
        return null;
    }

    public List buscarPorIdMarco(int idMarco) {
        session = HibernateUtil.getSessionFactory().openSession();
        String hql = "from PlantillaPapelTrabajo plantilla_papel_trabajo where plantilla_papel_trabajo.plantillaMarcoReferencia.idPlantilla= ? ";
        Query query = session.createQuery(hql);
        query.setInteger(0, idMarco);
        List resultList = null;

        try {
            session.beginTransaction();
            resultList = query.list();
            session.getTransaction().commit();
            session.close();
            return resultList;
        } catch (HibernateException he) {
            he.printStackTrace();
        }

        session.close();
        return null;
    }

}
